package BLL;

import DAO.ClienteDAO;
import DAO.ConexionBD;
import Entidades.Cliente;
import Entidades.Imagenes;
import Entidades.Nif;
import Entidades.Usuarios;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;

public class ClienteBLL {

    ConexionBD _conexionBD = new ConexionBD();
    ClienteDAO _clienteDAO = new ClienteDAO();
    ArrayList list;
    String oficina;
    String control;
    String cuenta;
    String comparar;
    String entidad;
    int calcEntidad;
    int suma;
    int suma2;

    public Cliente consultarPorDni(Connection conexion, Cliente cliente) throws Exception {

        conexion = _conexionBD.conectar();

        cliente = _clienteDAO.consultarPorDni(conexion, cliente);

        conexion.close();

        return cliente;

    }

    public Cliente consultarPorNombre(Connection conexion, Cliente cliente) throws Exception {

        conexion = _conexionBD.conectar();

        cliente = _clienteDAO.consultarPorNombre(conexion, cliente);

        conexion.close();

        return cliente;

    }

    public void contadorVisitas(Connection conexion, Cliente cliente) throws ClassNotFoundException, SQLException {

        conexion = _conexionBD.conectar();

        _clienteDAO.contadorVisitas(conexion, cliente);

        conexion.close();

    }

    public void insertar(Cliente cliente, Imagenes imagenes, Usuarios usuarios, Connection conexion) throws ClassNotFoundException, Exception {

        int dni = Integer.parseInt(cliente.getDni());
        oficina = cliente.getCuenta().substring(0, 8);
        control = cliente.getCuenta().substring(8, 10);
        cuenta = cliente.getCuenta().substring(10, 20);
        comparar = String.valueOf(control1(cliente)) + String.valueOf(control2(cliente));

        conexion = _conexionBD.conectar();

        conexion.setAutoCommit(false);
/*
        if (control.equals(comparar)) {
            cliente.setCuenta(oficina + control + cuenta);
        } else {
            conexion.rollback();
            throw new Exception();
        }
*/
        if (dni < 10000000 || dni > 99999999 || dni == 0) {
            conexion.rollback();
            throw new Exception();
        } else {
            cliente.setDni(dni + "-" + Nif.calcularLetra(dni));
            imagenes.setDni(dni + "-" + Nif.calcularLetra(dni));
            usuarios.setDni(dni + "-" + Nif.calcularLetra(dni));
        }

        conexion.setAutoCommit(true);
        _clienteDAO.insertar(cliente, conexion);

        conexion.close();

    }

    public ArrayList select(Connection conexion, Cliente cliente) throws Exception, ClassNotFoundException {

        conexion = _conexionBD.conectar();
  
        list = _clienteDAO.consultaconfoto(conexion, cliente);

        conexion.close();

        return list;

    }

    public void borrar(Cliente cliente, Connection conexion) throws ClassNotFoundException, Exception {

        conexion = _conexionBD.conectar();

        _clienteDAO.borrar(cliente, conexion);

        conexion.close();

    }

    public void actualizar(Cliente cliente, Connection conexion) throws ClassNotFoundException, Exception {

        conexion = _conexionBD.conectar();

        _clienteDAO.actualizar(cliente, conexion);

        conexion.close();

    }

    public int control1(Cliente cliente) {
        suma = 0;

        for (int i = 1; i <= 8; i++) {
            entidad = cliente.getCuenta().substring(i - 1, i);
            switch (i) {
                case 1:
                    calcEntidad = Integer.parseInt(entidad) * 4;
                    suma = suma + calcEntidad;
                    break;
                case 2:
                    calcEntidad = Integer.parseInt(entidad) * 8;
                    suma = suma + calcEntidad;
                    break;
                case 3:
                    calcEntidad = Integer.parseInt(entidad) * 5;
                    suma = suma + calcEntidad;
                    break;
                case 4:
                    calcEntidad = Integer.parseInt(entidad) * 10;
                    suma = suma + calcEntidad;
                    break;
                case 5:
                    calcEntidad = Integer.parseInt(entidad) * 9;
                    suma = suma + calcEntidad;
                    break;
                case 6:
                    calcEntidad = Integer.parseInt(entidad) * 7;
                    suma = suma + calcEntidad;
                    break;
                case 7:
                    calcEntidad = Integer.parseInt(entidad) * 3;
                    suma = suma + calcEntidad;
                    break;
                case 8:
                    calcEntidad = Integer.parseInt(entidad) * 6;
                    suma = suma + calcEntidad;
                    break;
            }
        }
        suma = 11 - (suma % 11);

        if (suma == 10) {
            suma = 1;
        }

        return suma;
    }

    public int control2(Cliente cliente) {
        suma = 0;
        for (int i = 11; i <= 20; i++) {
            entidad = cliente.getCuenta().substring(i - 1, i);
            switch (i) {
                case 11:
                    calcEntidad = Integer.parseInt(entidad) * 1;
                    suma = suma + calcEntidad;
                    break;
                case 12:
                    calcEntidad = Integer.parseInt(entidad) * 2;
                    suma = suma + calcEntidad;
                    break;
                case 13:
                    calcEntidad = Integer.parseInt(entidad) * 4;
                    suma = suma + calcEntidad;
                    break;
                case 14:
                    calcEntidad = Integer.parseInt(entidad) * 8;
                    suma = suma + calcEntidad;
                    break;
                case 15:
                    calcEntidad = Integer.parseInt(entidad) * 5;
                    suma = suma + calcEntidad;
                    break;
                case 16:
                    calcEntidad = Integer.parseInt(entidad) * 10;
                    suma = suma + calcEntidad;
                    break;
                case 17:
                    calcEntidad = Integer.parseInt(entidad) * 9;
                    suma = suma + calcEntidad;
                    break;
                case 18:
                    calcEntidad = Integer.parseInt(entidad) * 7;
                    suma = suma + calcEntidad;
                    break;
                case 19:
                    calcEntidad = Integer.parseInt(entidad) * 3;
                    suma = suma + calcEntidad;
                    break;
                case 20:
                    calcEntidad = Integer.parseInt(entidad) * 6;
                    suma = suma + calcEntidad;
                    break;
            }
        }

        suma = 11 - (suma % 11);
        if (suma == 10) {
            suma = 1;
        }

        return suma;
    }

}
